/*******************************************************************************
 * Copyright (c) 2003, 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package com.architexa.org.eclipse.gef.internal.ui.rulers;

import com.architexa.org.eclipse.gef.EditPart;
import com.architexa.org.eclipse.gef.EditPartFactory;
import com.architexa.org.eclipse.gef.GraphicalViewer;
import com.architexa.org.eclipse.gef.rulers.RulerProvider;

/**
 * @author Pratik Shah
 */
public class RulerEditPartFactory 
	implements EditPartFactory 
{
	
protected GraphicalViewer diagramViewer;
	
public RulerEditPartFactory(GraphicalViewer primaryViewer) {
	diagramViewer = primaryViewer;
}

/* (non-Javadoc)
 * @see org.eclipse.gef.EditPartFactory#createEditPart(org.eclipse.gef.EditPart, java.lang.Object)
 */
public EditPart createEditPart(EditPart parentEditPart, Object model) {
	// the model can be null when the contents of the root edit part are set to null
	EditPart part = null;
	if (isRuler(model)) {
		part = createRulerEditPart(parentEditPart, model);
	} else if (model != null) {
		part = createGuideEditPart(parentEditPart, model);
	}
	return part;
}

protected EditPart createGuideEditPart(EditPart parentEditPart, Object model) {
	return new GuideEditPart(model);
}

protected EditPart createRulerEditPart(EditPart parentEditPart, Object model) {
	return new RulerEditPart(model);
}

protected Object getHorizontalRuler() {
	Object ruler = null;
	RulerProvider provider = 
			(RulerProvider)diagramViewer.getProperty(RulerProvider.PROPERTY_HORIZONTAL_RULER);
	if (provider != null) {
		ruler = provider.getRuler();
	}
	return ruler;
}

protected Object getVerticalRuler() {
	Object ruler = null;
	RulerProvider provider = 
			(RulerProvider)diagramViewer.getProperty(RulerProvider.PROPERTY_VERTICAL_RULER);
	if (provider != null) {
		ruler = provider.getRuler();
	}
	return ruler;
}

protected boolean isRuler(Object model) {
	boolean result = false;
	if (model != null) {
		result = model == getHorizontalRuler() || model == getVerticalRuler();
	}
	return result;
}

}
